﻿#coding=utf-8
#引入时间
import time
#引入随机变量
import random
#引入web server 和 客户机之间的标准信息交换通道接口
import cgi
#导入系统setting
import settings
#引入django自带的form
from django import forms
#引入django自带的用户信息情况
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm,PasswordChangeForm
#从backend的form中导入用户的设置
from backend.forms import MyUserSettingsForm, MyUserCreationForm
#引入django的http的一些服务
from django.http import HttpResponseRedirect, HttpResponse, Http404
#引入django的消息响应传递函数render_to_response
from django.shortcuts import render_to_response
#引入django的一些模块
from django.contrib import auth
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required

#从backend的models中引入多个数据库的信息
from backend.models import Member, Topic, FollowRelation, Mail
from django.utils.encoding import smart_unicode
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.db.models import Q
from django.contrib.auth import REDIRECT_FIELD_NAME
from django.template import RequestContext as RC


@login_required
def logout_view(request):

  """ 用于用户退出的函数 """

  #收到退出的请求执行退出
  auth.logout(request)
  #返回到广播大厅
  return HttpResponseRedirect("/")


def login_view(request,redirect_field_name=REDIRECT_FIELD_NAME):

  """ 登入函数主要是用于用户的登陆 """

  #获取提交过来的参数  从数据库中读取用户信息用来比对
  redirect_to = request.REQUEST.get(redirect_field_name, '')
  if request.method == 'POST':
    form = AuthenticationForm(data=request.POST)
    #表单内容合法的情况执行以下代码 form.is_valid返回的是一个bool值
    if form.is_valid():
      #判断该用户是否已经在数据库中
      if not redirect_to or ' ' in redirect_to:
	  #提交为空 或者数据库不存在任何信息则执行以下代码 返回
        redirect_to = settings.LOGIN_REDIRECT_URL
      elif '//' in redirect_to and re.match(r'[^\?]*//', redirect_to):
	  #不在数据库中执行以下代码
        redirect_to = settings.LOGIN_REDIRECT_URL
      #用户登入 信息保存起来在form里
      auth.login(request, form.get_user())
      #检测是否有其他人的cookie存在  如果存在就删除
      if request.session.test_cookie_worked():
        request.session.delete_test_cookie()
      #以当前用户登陆进入主页面
      return HttpResponseRedirect(redirect_to)

  #如果以get请求发送过来 直接
  else:
    #用于log时的check检查是否符合条件 返回值为bool
    form = AuthenticationForm()
    #用于对整个页面的返回
  return render_to_response("login.html", {
    'form': form,
  },context_instance=RC(request))




def signup_view(request):

  """ 该函数用于用户的注册 进入到注册页面 """

  if request.method == 'POST':
    #调用系统的注册信息来显示
    form = MyUserCreationForm(request.POST)
    #调用成功 将信息保存到数据库中
    if form.is_valid():
      #信息到数据库的保存
      new_user = form.save()
      new_user.backend="%s.%s" %('django.contrib.auth.backends','ModelBackend')
      #以新用户登陆
      auth.login(request, new_user)
      #进入主页面
      return HttpResponseRedirect("/")
  else:
    form = MyUserCreationForm()
  return render_to_response("signup.html", {
  'form': form,
  },context_instance=RC(request))

